import java.util.ArrayList;
import java.util.List;

/**
 * 1276. 不浪费原料的汉堡制作方案
 * https://leetcode-cn.com/problems/number-of-burgers-with-no-waste-of-ingredients/
 */
public class Solutions_1276 {
    public static void main(String[] args) {
        int tomatoSlices = 16, cheeseSlices = 7;
        // output: {1, 6}  解释：制作 1 个巨无霸汉堡和 6 个小皇堡需要 4*1 + 2*6 = 16 片番茄和 1 + 6 = 7 片奶酪。不会剩下原料。

//        int tomatoSlices = 17, cheeseSlices = 4;  // output: {}  解释：只制作小皇堡和巨无霸汉堡无法用光全部原料。

//        int tomatoSlices = 4, cheeseSlices = 17;
        // output: {}  解释：制作 1 个巨无霸汉堡会剩下 16 片奶酪，制作 2 个小皇堡会剩下 15 片奶酪。

//        int tomatoSlices = 0, cheeseSlices = 0;  // output: {0, 0}
//        int tomatoSlices = 2, cheeseSlices = 1;  // output: {0, 1}

        List<Integer> result = numOfBurgers(tomatoSlices, cheeseSlices);
        System.out.println(result);
    }

    /**
     * 大汉堡：4 片番茄和 1 片奶酪
     * 小汉堡：2 片番茄和 1 片奶酪
     *
     * 分析题目，得出二元一次方程
     * 设制作 x 个大汉堡，y 个小汉堡，那么要使所有原料为 0，那么有方程式
     * (1) 4x + 2y = tomatoSlices    (x 个大汉堡需要 4x 数量，y 个小汉堡需要 2y 个数量，总和正好等于 tomatoSlices)
     * (2)  x + y = cheeseSlices  --> y = cheeseSlices - x
     * 消元计算，将 (2) * 2，再用 (1) - (2)，得到方程式
     * (3) 2x = tomatoSlices - (2 * cheeseSlices)  -->  x = (tomatoSlices / 2) - cheeseSlices
     * 那么，要使所有原料为 0
     * 大汉堡制作数量为：(tomatoSlices / 2) - cheeseSlices
     * 小汉堡制作数量为：cheeseSlices - x  （计算小汉堡的制作数量时，需要先计算出大汉堡的制作数量）
     * 大、小汉堡的数量可以大于等于 0，但是不能为负数，为负数时，不满足 (x >= 0, y >= 0) 的条件，说明无法使原料为 0
     */
    public static List<Integer> numOfBurgers(int tomatoSlices, int cheeseSlices) {
        List<Integer> res = new ArrayList<>();
        if (tomatoSlices % 2 == 1) {
            // 提前判断：番茄数量必须是偶数
            return res;
        }
        // 根据方程式(3)，计算出大汉堡的制作数量
        int big = tomatoSlices / 2 - cheeseSlices;
        if (big < 0) {
            // 大汉堡数量不可能为负数
            return res;
        }
        // 根据方程式(2)，计算出小汉堡的制作数量
        int small = cheeseSlices - big;
        if (small < 0) {
            // 小汉堡数量不可能为负数
            return res;
        }
        // 制作 big 个大汉堡和 small 个小汉堡时，tomatoSlices 和 cheeseSlices 可以为 0
        res.add(big);
        res.add(small);
        return res;
    }
}
